/*
 * Edge.h
 *
 *  Created on: Oct 31, 2009
 *      Author: jbarreneche
 */

#ifndef EDGE_H_
#define EDGE_H_

/*
 * Inner class que representa la arista. Consta de un id, dos
 * vertices de los extremos, una distancia en metros y una velocidad
 * maxima en Km/h para transitar por el vertice.
 */
class Edge {
public:
	/*
	 * Constructor. Recibe un id, los vertices de los extremos, la
	 * distancia y la velocidad maxima.
	 */
	Edge(std::string id, Vertex* origin, Vertex* destination,
			double distanceInMeters = 0.0, double speedInKMH = 0.0);
	/*
	 * Destructor.
	 */
	virtual ~Edge();
	/*
	 * Compara a la arista con otra.
	 */
	virtual bool equals(Edge* other);
	/*
	 * Getter del id.
	 */
	virtual std::string getId();
	/*
	 * Getter del vertice de origen.
	 */
	virtual Vertex* getOrigin();
	/*
	 * Getter del vertice destino.
	 */
	virtual Vertex* getDestination();
	/*
	 * Getter de la distancia en metros.
	 */
	virtual double getDistanceInMeters();
		/*
	 * Getter de la velocidad en Km/h.
	 */
	virtual double getSpeedInKMH();
	private:
	void setId(std::string id);
	void setOrigin(Vertex* origin);
	void setDestination(Vertex* destination);
	void setDistanceInMeters(double distance);
	void setSpeedInKMH(double speed);
	std::string id;
	Vertex* origin;
	Vertex* destination;
	double distanceInMeters;
	double speedInKMH;
};


#endif /* EDGE_H_ */
